package com.demo.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.demo.pojo.entity.Schedule;
import com.demo.pojo.dto.ScheduleListDTO;

import java.util.List;
import java.util.Map;

/**
 * 排课服务接口
 */
public interface ScheduleService extends IService<Schedule> {
    
    /**
     * 获取排课列表
     */
    List<ScheduleListDTO> getScheduleList();
    
    /**
     * 分页获取排课列表（支持模糊查询）
     */
    Map<String, Object> getSchedulePage(int page, int pageSize, String semester, String courseName, 
                                        String teacherName, String clazzName, String scheduleType, String status);
    
    /**
     * 智能排课
     */
    boolean intelligentSchedule(String semester);
    
    /**
     * 检查排课冲突
     */
    boolean checkScheduleConflict(Schedule schedule);
    
    /**
     * 根据周次/星期/节次/学期推断 time_slot_id（前端未直接传 timeSlotId 时使用）
     */
    Long findTimeSlotId(Schedule schedule);
    
    /**
     * 获取教师课表
     */
    List<ScheduleListDTO> getTeacherSchedule(Long teacherId, String semester);
    
    /**
     * 获取班级课表
     */
    List<ScheduleListDTO> getClassSchedule(Long clazzId, String semester);
    
    /**
     * 获取教室课表
     */
    List<ScheduleListDTO> getClassroomSchedule(Long classroomId, String semester);
    
    /**
     * 🔥 根据课程ID列表获取排课信息（用于查询选修课课表）
     */
    List<ScheduleListDTO> getSchedulesByCourseIds(List<Long> courseIds, String semester);
}